<script>
import { mapState, mapActions } from "vuex";

/**
 * 应用程序的根组件
 */
export default {
  /**
   * 计算属性，用于获取 Vuex 状态
   */
  computed: {
    /**
     * 从 Vuex 中映射 isLaunch 状态
     * @returns {boolean} - 表示应用是否启动的状态
     */
    ...mapState({
      isLaunch: (state) => state.system.isLaunch,
    }),
  },
  /**
   * 应用启动时执行的钩子函数
   */
  onLaunch: async function () {
    // 创建一个数组，用于存储需要并行执行的 Promise
    const promises = [
      // 发起获取应用是否启动的请求
      this.fetchIsLaunch(),
      // 发起获取 logo 文本的请求
      this.fetchLogoText(),
      // 发起获取满足价格条件的请求
      this.fetchSatisfyPrice(),
    ];
    // 检查本地存储中是否存在 subjectList
    if (!uni.getStorageSync("subjectList")) {
      // 如果不存在，则添加获取主题列表的请求到 promises 数组
      promises.push(this.fetchSubjectList());
    }
    // 检查用户是否已登录
    if (!this.$store.state.user.isLogin) {
      // 如果未登录，此处代码被注释掉，可用于跳转到登录页面
      // uni.reLaunch({
      //   url: "pages/user/login",
      // });
    } else {
      // 如果已登录，添加获取商家信息、用户信息和用户组信息的请求到 promises 数组
      promises.push(
        this.fetchMerchtantsCurrent(),
        this.fetchSupplierCurrent(),
        this.fetchAgentCurrent(),
        this.fetchGetUserInfo(),
        this.fetchGetUserGroups()
      );
      // 检查用户是否为商家
      if (this.$store.state.user.isStore) {
        // 如果是商家，添加获取收藏列表、配送列表和优惠券列表的请求到 promises 数组
        promises.push(
          // this.fetchCartList(),
          this.fetchCollectList(),
          this.fetchDeliverList(),
          this.fetchCouponList()
        );
        // 检查商家主题列表是否为空
        if (this.$store.state.subject.merchantSubjectList.length == 0) {
          // 如果为空，添加获取商家主题列表的请求到 promises 数组
          promises.push(
            this.fetchMerchantSubjectList(this.$store.state.user.storeInfo.id)
          );
        }
      }
    }

    // 并行执行所有 promises 数组中的请求，并等待所有请求完成
    await Promise.all(promises);

    this.$store.commit(
      "SET_CURRENT_ROLE",
      this.$store.state.user.currentRoleId
    );

    // 检查本地存储中是否存在 isLaunch 且应用是否已启动
    if (!uni.getStorageSync("isLaunch") && this.isLaunch != 0) {
      // 如果条件满足，跳转到启动页面
      uni.reLaunch({
        url: "/pages/app/launch",
      });
    } else if (this.$store.state.user.currentRoleId == 2) {
      uni.reLaunch({
        url: "/pages/supplier/statistics",
      });
    } else if (this.$store.state.user.currentRoleId == 3) {
      uni.reLaunch({
        url: "/pages/agenter/statistics",
      });
    }
  },
  /**
   * 应用显示时执行的钩子函数
   */
  onShow: async function () {
    // 打印日志，表示应用已显示
    console.log("App Show");
  },
  /**
   * 应用隐藏时执行的钩子函数
   */
  onHide: function () {
    // 打印日志，表示应用已隐藏
    console.log("App Hide");
  },
  /**
   * 组件方法，用于映射 Vuex actions
   */
  methods: {
    /**
     * 从 Vuex 中映射多个 action 方法
     */
    ...mapActions([
      "fetchSubjectList",
      "fetchMerchantSubjectList",
      "fetchMerchtantsCurrent",
      "fetchSupplierCurrent",
      "fetchAgentCurrent",
      "fetchGetUserInfo",
      "fetchGetUserGroups",
      "fetchCartList",
      "fetchCollectList",
      "fetchDeliverList",
      "fetchCouponList",
      "fetchLogoText",
      "fetchIsLaunch",
      "fetchSatisfyPrice",
    ]),
  },
};
</script>

<style lang="scss">
/*每个页面公共css */
// @import "uview-plus/index.scss";
// 导入 uview-plus 样式文件
@import "@/uni_modules/uview-plus/index.scss";
// 导入公共演示样式文件
@import "common/demo.scss";

/**
 * 全局页面样式
 */
page {
  // 设置页面背景颜色
  background-color: #f0f0f0;
  // 设置页面字体大小
  font-size: 28rpx;
}

/**
 * 状态栏占位样式
 */
.seat {
  // 设置宽度为 100%
  width: 100%;
  // 设置高度为状态栏高度
  height: var(--status-bar-height);
  // z-index 被注释掉
  // z-index: 1000;
}

/**
 * 固定状态栏占位样式
 */
.seat-fixed {
  // 设置宽度为 100%
  width: 100%;
  // 设置高度为状态栏高度
  height: var(--status-bar-height);
  // 设置定位为相对定位
  position: relative;
  // 背景颜色被注释掉
  // background-color: #FFFFFF;
}

/**
 * uni-modal 组件样式
 */
uni-modal {
  // 设置 z-index 为 19999
  z-index: 19999 !important;
}
</style>
